// 1. 安装express-session
// 2. 导入express-session模块
const expS = require('express-session');
// 3. 导入express模块
const exp = require('express');
// 4. 创建express对象
const app = exp();

// 5. 调用并配置session中间件
app.use(expS({
    // 5.1 参数："name" = 设置cookie的name，默认值是：connect.sid
    name:"s_id",
    // 5.2 参数："secret" = 参与加密的字符串（又称签名）
    secret:"0215zuiniubi",
    // 5.3 参数："saveUninitialized" = 是否为每次请求都设置一个cookie用来存储
    saveUninitialized:false,
    // 5.3 参数："resave" = 强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false
    resave:true,
    // 5.4 参数："cookie" = 存储到cookie的相关配置
    cookie:{    
        // 5.4.1 参数："httpOnly" 开启后,前端无法通过 JS 操作
        httpOnly:true,
        // 5.4.2 参数："maxAge"  控制 sessionID 的过期时间
        maxAge:1000*60*60
    }  
}))
    
// 6 配置get路由 - 设置session
app.get('/setSession',(req,res)=>{
    // 6.1 将数据存入session的自定义属性内 - req.session.name = value
    req.session.username = 'xiaowang';
    req.session.age = 18;
    req.session.sex = '男'; 
    // 6.2 返回响应
    res.send('设置成功');
})
    
// 7 配置get路由 - 获取session
app.get('/getSession',(req,res)=>{
    // 7.1 获取session - req.session.name
    console.log(req.session.username);
    console.log(req.session.age);
    console.log(req.session.sex);
    // 7.2 返回响应
    res.send('获取成功，用户名：'+req.session.username+'年龄：'+req.session.age+'性别：'+req.session.sex);
})
  
// 8. 配置get路由 - 删除session
app.get('/deleteSession',(req,res)=>{
    // 8.1 删除session - req.destroy(callback)
    req.session.destroy(()=>{
        console.log("删除成功");
        res.send('删除成功');
    })
    // 8.1.1 在回调中返回响应
});
    
// 9 监听端口服务
app.listen(80,()=>{
    console.log("启动成功");
})